rain 툴을 사용해서 CloudFormation 템플릿을 배포해 봤습니다.

rain 툴을 사용해서 CloudFormation 템플릿을 배포해 봤습니다.

rain 툴을 사용해서 CloudFormation 템플릿을 배포해 봤습니다.
Clock Icon2024.12.04

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 rain 툴을 사용해서 CloudFormation 템플릿을 배포해 봤습니다.

AWS CloudShell을 사용할 생각이므로 AWS CloudShell에 대한 설명은 아래 블로그를 참고해 주세요.

https://dev.classmethod.jp/articles/jw-tried-aws-cloudshell/

rain 설치

rain에 대한 특징과 설명, 설치 방법은 아래 URL에서 확인할 수 있습니다.

https://github.com/aws-cloudformation/rain

rain을 설치하기 위해 AWS CloudShell을 활용할 것이며, brew를 먼저 설치할 필요가 있습니다.

[cloudshell-user@ip-xx-xxx-xx-x ~]$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Press RETURN/ENTER to continue or any other key to abort: (엔터를 누릅니다.)

[cloudshell-user@ip-xx-xxx-xx-x ~]$ echo 'eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)' >> /home/cloudshell-user/.bash_profile
[cloudshell-user@ip-xx-xxx-xx-x ~]$ eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)
[cloudshell-user@ip-xx-xxx-xx-x ~]$ brew --version
Homebrew 4.4.9

[cloudshell-user@ip-xx-xxx-xx-x ~]$ sudo yum install gcc -y
[cloudshell-user@ip-xx-xxx-xx-x ~]$ brew install rain
[cloudshell-user@ip-xx-xxx-xx-x ~]$ rain --version
Rain v1.19.0 linux/amd64

brew와 gcc를 설치한 다음, brew를 이용해 rain을 성공적으로 설치할 수 있습니다.

rain을 이용하여 템플릿 생성

[cloudshell-user@ip-xx-xxx-xx-x ~]$ rain
Rain is a command line tool for working with AWS CloudFormation templates and stacks

Usage:
  rain [command]

Stack commands:
  cat         Get the CloudFormation template from a running stack
  cc          Interact with templates using Cloud Control API instead of CloudFormation
  deploy      Deploy a CloudFormation stack or changeset from a local template
  logs        Show the event log for the named stack
  ls          List running CloudFormation stacks or changesets
AWSTemplateFormatVersion: 2010-09-09
  rm          Delete a CloudFormation stack or changeset
  stackset    This command manipulates stack sets.
  watch       Display an updating view of a CloudFormation stack

Template commands:AWSTemplateFormatVersion: 2010-09-09
  bootstrap   Creates the artifacts bucket
  build       Create CloudFormation templates
  diff        Compare CloudFormation templates
  fmt         Format CloudFormation templates
  forecast    Predict deployment failures
  merge       Merge two or more CloudFormation templates
  module      Interact with Rain modules in CodeArtifact
  pkg         Package local artifacts into a template
  tree        Find dependencies of Resources and Outputs in a local template
AWSTemplateFormatVersion: 2010-09-09

Other Commands:
  completion  Generate the autocompletion script for the specified shell
  console     Login to the AWS console
  help        Help about any command
  info        Show your current configuration

rain을 입력해 보면, 사용할 수 있는 명령어를 확인할 수 있습니다. 여기서 [Template commands]의 build를 활용해서 샘플 템플릿을 생성할 수 있습니다.

[cloudshell-user@ip-xx-xxx-xx-x ~]$ rain build AWS::EC2::VPC > VPC.yml
[cloudshell-user@ip-xx-xxx-xx-x ~]$ ls
VPC.yml

build 명령어로 VPC 템플릿을 생성해 보면, VPC.yml 파일이 생성된 것을 확인할 수 있습니다.

AWSTemplateFormatVersion: 2010-09-09

Description: Generated by rain

Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: STRING
      EnableDnsHostnames: BOOLEAN
      EnableDnsSupport: BOOLEAN
      InstanceTenancy: STRING
      Ipv4IpamPoolId: STRING
      Ipv4NetmaskLength: INTEGER
      Tags:
        - Key: STRING
          Value: STRING
        - Key: STRING
          Value: STRING

코드를 확인해 보면, 말 그대로 샘플용으로 템플릿이 생성되며, 이 템플릿을 사용자 입 맛에 맞게 수정하면 됩니다.

rain을 이용하여 템플릿 배포

이번에는 샘플 템플릿을 수정하고 배포해 보도록 하겠습니다.

AWSTemplateFormatVersion: 2010-09-09

Description: Generated by rain

Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: "10.0.0.0/24"
      EnableDnsHostnames: "true"
      EnableDnsSupport: "true"
      InstanceTenancy: default
      Tags:
        - Key: Name
          Value: "test-vpc"

VPC를 생성하기 위한 최소한의 옵션들만 작성했습니다.

[cloudshell-user@ip-xx-xxx-xx-x ~]$ rain deploy VPC.yml
CloudFormation will make the following changes:
Stack VPC:
  + AWS::EC2::VPC VPC
Do you wish to continue? (Y/n) y
Deploying template 'VPC.yml' as stack 'VPC' in ap-northeast-1.
Stack VPC: CREATE_COMPLETE
Successfully deployed VPC

deploy 명령어를 입력하여 배포를 시작합니다.

계속 하겠냐는 물음에 y를 입력하면 배포가 시작됩니다.

jw-rainblg-1

배포가 끝나고 CloudFormation 콘솔 화면을 확인해 보면, VPC 스택이 생성된 것을 확인할 수 있습니다.

jw-rainblg-2

VPC 콘솔 화면에서도 생성된 VPC를 확인할 수 있습니다.

rain을 이용하여 템플릿 수정 및 삭제

이번에는 rain을 이용하여 배포한 템플릿을 수정하고 삭제해 보겠습니다.

AWSTemplateFormatVersion: 2010-09-09

Description: Generated by rain

Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: "10.0.0.0/24"
      EnableDnsHostnames: "true"
      EnableDnsSupport: "true"
      InstanceTenancy: default
      Tags:
        - Key: Name
          Value: "hello-vpc"

수정한 결과를 알아보기 쉽게 태그 이름을 변경했습니다. (test-vpc -> hello-vpc)

[cloudshell-user@ip-xx-xxx-xx-x ~]$ rain deploy VPC.yml
CloudFormation will make the following changes:
Stack VPC:
  > AWS::EC2::VPC VPC
Do you wish to continue? (Y/n) y
Deploying template 'VPC.yml' as stack 'VPC' in ap-northeast-1.
Stack VPC: UPDATE_COMPLETE
Successfully updated VPC

수정된 템플릿을 배포하기 위해서는 이전과 동일하게 [deploy]를 사용합니다.

jw-rainblg-3

VPC 콘솔 화면에서 확인해 보면, test-vpc가 hello-vpc로 변경된 것을 확인할 수 있습니다.

[cloudshell-user@ip-xx-xxx-xx-x ~]$ rain rm VPC
Stack VPC: UPDATE_COMPLETE
Are you sure you want to delete this stack? (y/N) y
Successfully deleted stack 'VPC'

마지막으로 템플릿을 삭제하기 위해 [rm]을 사용하면, 성공적으로 CloudFormation 스택이 삭제됩니다.

본 블로그 게시글을 읽고 궁금한 사항이 있으신 분들은 jaewookkim533@yahoo.com로 보내주시면 감사하겠습니다.

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.